package com.project.server;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * 封装读取流的请求类
 */
public class Request {
//    客户端请求路径
    private String url;
//    客户端请求的表单数据
    private Map<String,String> paramMap = new HashMap<>();
    private String[]strings;
    public Request (InputStream in){
        byte[] by = new byte[1024];
//            将读取流中的数据，读取到byte数组中
        try {
            in.read(by);
            //            将byte数组转换为String trim去掉内容后面空格
            String str = new String(by).trim();
//            System.out.println(str);
//            this.url =str.split("\\s")[1].substring(1);
//            this.url =str.split("\r")[0].substring(0);

//            if (str.startsWith("GET")){
//                 strings=url.split("[?]");
//                System.out.println(strings);
//                System.out.println(url);
//            }
            System.out.println(str);
            if (str.startsWith("GET")){
               this.pressGet(str);
            }
            else if (str.startsWith("POST")){
                this.pressPost(str);
            }



        } catch (IOException e) {
            e.printStackTrace();
        }

//        byte [] by = new byte[1024];
//        try {
////            将读取流中的数据，读取到byte数组中
//            in.read(by);
////            将byte数组转换为string
//            String str =new String(by).trim();
////            字符串拆分
//            this.url = str.split("\\s+")[1].substring(1);
//
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
    }

    /**
     * 用于处理POST 请求
     * @param str
     */
    public void pressPost(String str){
       String [] srt1 = str.split("\\s+");
       this.url = srt1[1].substring(1);
       this.paramMaps(srt1[srt1.length-1]);


    }

    /**
     * 拥有处理GET 请求
     * @param str
     */
    public void pressGet(String str){

     String [] srts =  str.split("\\s+");

     String urlStr = srts[1].substring(1);
     if (urlStr.indexOf("?")==-1){
         this.url=urlStr;
     }
     else {
         String[] srt1 = urlStr.split("[?]");
         this.url=srt1[0];
         this.paramMaps(srt1[1]);
     }
    }

    /**
     * 将形如a=1&b=2字符串封装成map集合
     * @param str
     */
    public void paramMaps(String str){
        String [] s = str.split("&");
        for (String p : s){
            String [] s1 = p.split("=");
            if (s1.length==2){
                this.paramMap.put(s1[0],s1[1]);
            }
            else if (s1.length==1){
                this.paramMap.put(s1[0],"");
            }
        }
    }

    /**
     * 根据表单名，获取表单值
     * @param key
     * @return
     */
    public String getParamMap(String key){
        return this.paramMap.get(key);
    }

    public String getUrl() {
        return url;
    }
    @Override
    public String toString() {
        return "Request{" +
                "url='" + url + '\'' +
                ", paramMap=" + paramMap +
                '}';
    }
}
